<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 在正常的开发过程中 有很多的异步操作 例如 ajax请求 setInterval, setTimeout 所有的事件等等
        // var num = 0
        // setTimeout(() => {
        //     num++
        // },0)
        // console.log(num); // 因为这里是同步操作
        // // 所以这段代码的真正执行顺序是 
        // var num = 0
        // console.log(num)
        // setTimeout(() => {
        //     num++
        // })
        // 因为异步操作永远比同步要慢 为了解决这样的问题promise就诞生了
        // promise是一个异步变成的解决方案 promise其实是一个构造函数
        // promise接收一个函数作为参数 并且promise有三个状态 pending（表示promsie正在执行中）
        // fullfilled表示promise执行成功 rejected表示promise执行失败
        // promise只能从进行中的状态转化为成功的装太 或者从进行中的状态转化为失败的状态
        // 一旦有成功或者失败产生promise就立即结束了
        // 
        var num = 0
        var promise = new Promise((resolve, reject) => {
            // resolve 是将promise从进行中的状态转化为成功的状态的方法
            // reject 是将promise从进行中的状态转化为失败的状态的方法
            setTimeout(() => {
                num++
                // resolve(num)
                reject('请求失败了')
            })
        })
        
        // then 通过then方法可以拿到promise执行的结果
        // then的第一个参数是获取执行成功的结果的函数
        // 第二个是获取执行失败的的结果的函数
        promise.then(res => {
            console.log(res);
        }, err => {
            console.log(err);
        }).catch(err => {
            console.log(err);
        })

        promise.then(res => {
            console.log(res);
        }).catch(err => { // 也可以使用catch来获取执行失败的结果
            console.log(err);
        })
    </script>
</body>
</html>